package cn.net.Map;
// 测试Map<Integer,String>集合遍历/迭代
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*Map中的数据要符合映射规则,一定注意要同时指定 K 和 V 的数据类型
   总结1:Map中存放的都是无序的数据
   总结2 :Map中的key不可以重复,如果重复,此Key对应的Value值会被覆盖打印
        Map==数组(16) + 链表(红黑树>8)
        hash(key)%n===>key的哈希码值对n=16进行取余，决定了key值放在数组的哪儿
 */
public class TestMap {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap();//Map(key,value)
        map.put(1,"青铜");
        map.put(2,"白银");
        map.put(3,"黄金");
        map.put(4,"铂金");
        //map.put(1,"砖石");

        System.out.println(map);//整的打印方式

        System.out.println("-------遍历方式一：采用keySet()方法-----------");
        //前提：遍历map中的数据,但是map本身没有迭代器,所以需要转换成set集合
        Set<Integer> keySet = map.keySet();//1.调用keySet()方法，需要使用快捷键：alt+enter
        Iterator<Integer> it = keySet.iterator();//2.获取迭代器,使用快捷键alt+enter
        //3.调用while循环遍历集合中的所有元素
        while(it.hasNext()){
            Integer key = it.next();//next()方法打印的是Map对象中的key值
            String value = map.get(key);
            System.out.println("{"+key+"="+value+"}");//Map格式：散的打印方式
        }
       /*
        {1=青铜}
        {2=白银}
        {3=黄金}
        {4=铂金}
        */
        System.out.println("--------------------------------------------");

        System.out.println("-------遍历方式二：采用entrySet()方法--------");
        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
        Iterator<Map.Entry<Integer, String>> it2 = entrySet.iterator();
        while(it2.hasNext()){
            Map.Entry<Integer, String> entry = it2.next();
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println("{"+key+"="+value+"}");
            /*
            {1=青铜}
            {2=白银}
            {3=黄金}
            {4=铂金}
             */

        }


    }
}
